package com.lhn.spring5.theLifeCycle;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.*;

/**
 * LouzaiBean
 *
 * @author lhn
 * @date 2022/09/20 10:50
 * @since 1.0.0
 **/
public class LouzaiBean implements BeanNameAware, BeanFactoryAware, InitializingBean, DisposableBean {

    /**
     * 姓名
     */
    private String name;

    public LouzaiBean() {
        System.out.println("1.调用构造方法：我先出生了！");
    }

    public void setName(String name) {
        this.name = name;
        System.out.println("2.设置属性：我的名字叫:" + name);
    }

    /**
     * 让 Bean 能拿到容器的一些资源
     */
    @Override
    public void setBeanName(String s) {
        System.out.println("3.调用BeanNameAware#setBeanName方法:我要上学了，起了个学名");
    }

    /**
     * 让 Bean 能拿到容器的一些资源
     */
    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("4.调用BeanFactoryAware#setBeanFactory方法：选好学校了");
    }


    /**
     * 定义初始化方法
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("6.InitializingBean#afterPropertiesSet方法：入学登记");
    }

    /**
     * 自定义初始化
     */
    public void init() {
        System.out.println("7.自定义 init 方法：努力上学 ing");
    }

    /**
     * 销毁方法
     */
    @Override
    public void destroy() throws Exception {
        System.out.println("9.DisposableBean#destroy方法：平淡的一生落幕了");
    }

    /**
     * 自定义销毁方法
     */
    public void destroyMethod() {
        System.out.println("10.自定义destroy方法:睡了，别想叫醒我");
    }

    public void work() {
        System.out.println("Bean使用中：工作，只有对社会没有用的人才放假。。");
    }
}